package cn.thinkluck.pattern.flyweight;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 棋盘
 * 这个例子展示类享元模式
 * 由于一盘棋上的棋子都上固定的，先创建好棋子，然后通过工厂，获取棋子的实例，每个棋子的实例都只存一份
 * 并且棋子没有set方法，这意味这些棋子都不可变，这样只整个jvm中每个棋子只存在一份
 * @Author liutao
 * @DateTime 2024/7/22 下午10:48
 */
@AllArgsConstructor
@Data
public class ChessBoard {
    //模拟棋盘
    private Map<ChessPoint, ChessUnit> chessPieces;

    public ChessBoard() {
        chessPieces = new HashMap<>(64);
        //初始化棋子在棋盘上的位置
        chessPieces.put(new ChessPoint(1, 1), ChessUnitFactory.getChessUnit(1L));
        chessPieces.put(new ChessPoint(1, 2), ChessUnitFactory.getChessUnit(2L));
        chessPieces.put(new ChessPoint(1, 3), ChessUnitFactory.getChessUnit(3L));
        chessPieces.put(new ChessPoint(1, 4), ChessUnitFactory.getChessUnit(4L));
        chessPieces.put(new ChessPoint(1, 5), ChessUnitFactory.getChessUnit(5L));
        chessPieces.put(new ChessPoint(1, 6), ChessUnitFactory.getChessUnit(6L));
    }

    public static void main(String[] args) {
        ChessBoard chessBoard = new ChessBoard();
        chessBoard.getChessPieces().forEach((k, v) -> {
            System.out.println(k + ":" + v);
        });
    }
}
